diff --git a/system/codeigniter/Common.php b/system/codeigniter/Common.php
index c7f9568..340be24 100644
--- a/system/codeigniter/Common.php
+++ b/system/codeigniter/Common.php
@@ -203,10 +203,10 @@
 * @access	public
 * @return	void
 */
-function show_error($message)
+function show_error($message, $status_code = 500)
 {
 	$error =& load_class('Exceptions');
-	echo $error->show_error('An Error Was Encountered', $message);
+	echo $error->show_error('An Error Was Encountered', $message, 'error_general', $status_code);
 	exit;
 }
 
@@ -252,6 +252,91 @@
 	$LOG->write_log($level, $message, $php_error);
 }
 
+
+/**
+ * Set HTTP Status Header
+ *
+ * @access	public
+ * @param	int 	the status code
+ * @param	string	
+ * @return	void
+ */
+function set_status_header($code = 200, $text = '')
+{
+	$stati = array(
+						200	=> 'OK',
+						201	=> 'Created',
+						202	=> 'Accepted',
+						203	=> 'Non-Authoritative Information',
+						204	=> 'No Content',
+						205	=> 'Reset Content',
+						206	=> 'Partial Content',
+
+						300	=> 'Multiple Choices',
+						301	=> 'Moved Permanently',
+						302	=> 'Found',
+						304	=> 'Not Modified',
+						305	=> 'Use Proxy',
+						307	=> 'Temporary Redirect',
+
+						400	=> 'Bad Request',
+						401	=> 'Unauthorized',
+						403	=> 'Forbidden',
+						404	=> 'Not Found',
+						405	=> 'Method Not Allowed',
+						406	=> 'Not Acceptable',
+						407	=> 'Proxy Authentication Required',
+						408	=> 'Request Timeout',
+						409	=> 'Conflict',
+						410	=> 'Gone',
+						411	=> 'Length Required',
+						412	=> 'Precondition Failed',
+						413	=> 'Request Entity Too Large',
+						414	=> 'Request-URI Too Long',
+						415	=> 'Unsupported Media Type',
+						416	=> 'Requested Range Not Satisfiable',
+						417	=> 'Expectation Failed',
+
+						500	=> 'Internal Server Error',
+						501	=> 'Not Implemented',
+						502	=> 'Bad Gateway',
+						503	=> 'Service Unavailable',
+						504	=> 'Gateway Timeout',
+						505	=> 'HTTP Version Not Supported'
+					);
+
+	if ($code == '' OR ! is_numeric($code))
+	{
+		show_error('Status codes must be numeric', 500);
+	}
+
+	if (isset($stati[$code]) AND $text == '')
+	{				
+		$text = $stati[$code];
+	}
+	
+	if ($text == '')
+	{
+		show_error('No status text available.  Please check your status code number or supply your own message text.', 500);
+	}
+	
+	$server_protocol = (isset($_SERVER['SERVER_PROTOCOL'])) ? $_SERVER['SERVER_PROTOCOL'] : FALSE;
+
+	if (substr(php_sapi_name(), 0, 3) == 'cgi')
+	{
+		header("Status: {$code} {$text}", TRUE);
+	}
+	elseif ($server_protocol == 'HTTP/1.1' OR $server_protocol == 'HTTP/1.0')
+	{
+		header($server_protocol." {$code} {$text}", TRUE, $code);
+	}
+	else
+	{
+		header("HTTP/1.1 {$code} {$text}", TRUE, $code);
+	}
+}
+
+
 /**
 * Exception Handler
 *
diff --git a/system/libraries/Exceptions.php b/system/libraries/Exceptions.php
index 902b574..1f99d01 100644
--- a/system/libraries/Exceptions.php
+++ b/system/libraries/Exceptions.php
@@ -113,8 +113,10 @@
 	 * @param	string	the template name
 	 * @return	string
 	 */
-	function show_error($heading, $message, $template = 'error_general')
+	function show_error($heading, $message, $template = 'error_general', $status_code = 500)
 	{
+		set_status_header($status_code);
+		
 		$message = '<p>'.implode('</p><p>', ( ! is_array($message)) ? array($message) : $message).'</p>';
 
 		if (ob_get_level() > $this->ob_level + 1)
diff --git a/system/libraries/Output.php b/system/libraries/Output.php
index 6bfb9c7..4423ac7 100644
--- a/system/libraries/Output.php
+++ b/system/libraries/Output.php
@@ -116,7 +116,8 @@
 	
 	/**
 	 * Set HTTP Status Header
-	 *
+	 * moved to Common procedural functions in 1.7.2
+	 * 
 	 * @access	public
 	 * @param	int 	the status code
 	 * @param	string	
@@ -124,77 +125,7 @@
 	 */	
 	function set_status_header($code = '200', $text = '')
 	{
-		$stati = array(
-							'200'	=> 'OK',
-							'201'	=> 'Created',
-							'202'	=> 'Accepted',
-							'203'	=> 'Non-Authoritative Information',
-							'204'	=> 'No Content',
-							'205'	=> 'Reset Content',
-							'206'	=> 'Partial Content',
-							
-							'300'	=> 'Multiple Choices',
-							'301'	=> 'Moved Permanently',
-							'302'	=> 'Found',
-							'304'	=> 'Not Modified',
-							'305'	=> 'Use Proxy',
-							'307'	=> 'Temporary Redirect',
-							
-							'400'	=> 'Bad Request',
-							'401'	=> 'Unauthorized',
-							'403'	=> 'Forbidden',
-							'404'	=> 'Not Found',
-							'405'	=> 'Method Not Allowed',
-							'406'	=> 'Not Acceptable',
-							'407'	=> 'Proxy Authentication Required',
-							'408'	=> 'Request Timeout',
-							'409'	=> 'Conflict',
-							'410'	=> 'Gone',
-							'411'	=> 'Length Required',
-							'412'	=> 'Precondition Failed',
-							'413'	=> 'Request Entity Too Large',
-							'414'	=> 'Request-URI Too Long',
-							'415'	=> 'Unsupported Media Type',
-							'416'	=> 'Requested Range Not Satisfiable',
-							'417'	=> 'Expectation Failed',
-		
-							'500'	=> 'Internal Server Error',
-							'501'	=> 'Not Implemented',
-							'502'	=> 'Bad Gateway',
-							'503'	=> 'Service Unavailable',
-							'504'	=> 'Gateway Timeout',
-							'505'	=> 'HTTP Version Not Supported'
-						);
-
-		if ($code == '' OR ! is_numeric($code))
-		{
-			show_error('Status codes must be numeric');
-		}
-
-		if (isset($stati[$code]) AND $text == '')
-		{				
-			$text = $stati[$code];
-		}
-		
-		if ($text == '')
-		{
-			show_error('No status text available.  Please check your status code number or supply your own message text.');
-		}
-		
-		$server_protocol = (isset($_SERVER['SERVER_PROTOCOL'])) ? $_SERVER['SERVER_PROTOCOL'] : FALSE;
-	
-		if (substr(php_sapi_name(), 0, 3) == 'cgi')
-		{
-			header("Status: {$code} {$text}", TRUE);
-		}
-		elseif ($server_protocol == 'HTTP/1.1' OR $server_protocol == 'HTTP/1.0')
-		{
-			header($server_protocol." {$code} {$text}", TRUE, $code);
-		}
-		else
-		{
-			header("HTTP/1.1 {$code} {$text}", TRUE, $code);
-		}
+		set_status_header($code, $text);
 	}
 	
 	// --------------------------------------------------------------------
diff --git a/system/libraries/URI.php b/system/libraries/URI.php
index f09a5cd..efc7a18 100644
--- a/system/libraries/URI.php
+++ b/system/libraries/URI.php
@@ -188,8 +188,7 @@
 		{
 			if ( ! preg_match("|^[".preg_quote($this->config->item('permitted_uri_chars'))."]+$|i", $str))
 			{
-				header('HTTP/1.1 400 Bad Request');
-				show_error('The URI you submitted has disallowed characters.');
+				show_error('The URI you submitted has disallowed characters.', 400);
 			}
 		}
 
